/*管道通信——进程A写入管道*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc,char** argv)
{
	int fd;
	char buf[BUFSIZ];//BUFSIZ默认8KB
	bzero(buf,BUFSIZ);

	/*检查参数*/
	if(argc != 2)
	{
		printf("如要写入管道，则输入：%s 管道名\n",argv[0]);
		return 1;
	}

	/*创建管道*/
	if(mkfifo(argv[1], 0664) < 0)
	{
		perror("mkfifo");
		return 1;
	}

	/*打开管道*/
	fd = open(argv[1],O_WRONLY);
	if(fd == -1)
	{
		perror("open");
		return 1;
	}

	/*写入数据*/
	#if 1
	while(fgets(buf,BUFSIZ,stdin) != NULL)
	{
		write(fd,buf,strlen(buf));//输入多长就向管道写多长
		if((strncmp(buf, "quit", 4) == 0) && (strlen(buf) == 5))
			break;
		bzero(buf,BUFSIZ);
	}
	#else
	while (1) 
	{
		bzero(buf, BUFSIZ);
		fgets(buf, BUFSIZ, stdin);
		write(fd, buf, strlen(buf));
		if ((strncmp(buf, "quit", 4) == 0) && (strlen(buf) == 5)) break;
	}
	#endif
	
	/*关闭管道*/
	close(fd);

	/*删除管道*/
	sleep(1);//等待一会，以便另一进程读取完管道数据
	remove(argv[1]);

	return 0;
}


